package main

import (
	"encoding/json"
	"fmt"
	"math/rand"
	"os"
	"time"
)

func write(userInfo map[string]int) {
	// map->json
	userJsonFile, err := json.MarshalIndent(userInfo, "", " ")
	if err != nil {
		fmt.Println("Map转换错误:", err)
	}
	// 写入
	err = os.WriteFile("./容器类型/点名次数统计.json", userJsonFile, 0644)
	if err != nil {
		fmt.Println("Json写入错误:", err)
	}
}

func read() map[string]int {
	// 读取文件
	userFile, err := os.ReadFile("./容器类型/点名次数统计.json")
	if err != nil {
		fmt.Println("Json文件读取错误:", err)
		return make(map[string]int)
	}
	// json->map
	var userInfo map[string]int
	err = json.Unmarshal([]byte(userFile), &userInfo)
	if err != nil {
		fmt.Println("Json转换错误:", err)
	}
	if userInfo == nil {
		return make(map[string]int) // 返回空map
	}
	return userInfo
}





func main() {
	var str1 string
	fmt.Println("按任意键输出一名同学名字：")
	rand.Seed(time.Now().UnixNano()) //不加随机种子默认就是1

	userInfo := read()
	stuname := []string{"史伟明", "易鸽玲", "项鼎", "严东豪", "zz", "ssy", "HMJ"}

	for {
		fmt.Scanln(&str1)
		if str1 == "q" || str1 == "" {
			fmt.Println("点名系统已经退出")
			break
		}



		if i := 0; i < len(stuname) {

			i = rand.Intn(len(stuname))
			if i == 0 {
				fmt.Println("请史伟名回答问题")
				userInfo[stuname[0]] = userInfo[stuname[0]] + 1 // 被点名次数+1


			} else if i == 1 {
				fmt.Println("请易鸽玲回答问题")
				userInfo[stuname[1]] = userInfo[stuname[1]] + 1 // 被点名次数+1


			} else if i == 2 {
				fmt.Println("请项鼎回答问题")
				userInfo[stuname[2]] = userInfo[stuname[2]] + 1 // 被点名次数+1


			} else if i == 3 {
				fmt.Println("请严冬豪回答问题")
				userInfo[stuname[3]] = userInfo[stuname[3]] + 1 // 被点名次数+1


			} else if i == 4 {
				fmt.Println("请zz回答问题")
				userInfo[stuname[4]] = userInfo[stuname[4]] + 1 // 被点名次数+1

			} else if i == 5 {
				fmt.Println("请ssy回答问题")
				userInfo[stuname[5]] = userInfo[stuname[5]] + 1 // 被点名次数+1

			} else if i == 6 {
				fmt.Println("请HMJ回答问题")
				userInfo[stuname[6]] = userInfo[stuname[6]] + 1 // 被点名次数+1

			}

			stuname = append(stuname[:i], stuname[i+1:]...)
			fmt.Println(stuname)
			for userName, callCount := range userInfo {
				fmt.Println(userName, "\t", callCount)

			}
		}
		write(userInfo)
	}
}